package entity

import "time"

type ITime interface {
	//Loop时的时间
	GetNowTime() time.Time
	//设置Loop时的时间
	SetNowTime(n time.Time)
	//设置TICK的时间 只有系统协程可以对子协程做
	SetTickerNow(n time.Time)
	//获取TICK器
	GetTicker() <-chan time.Time
}

/*

 */
type EntityTime struct {
	// 对象的当前时间
	nowTime time.Time
	// ntt对象的tick尝试使用server的time.now这样全局只需要拿一次time.now就可以完成一次所有对应的tick
	ticker chan time.Time
}

func (this *EntityTime) OnCreated(now time.Time) {
	this.ticker = make(chan time.Time, 1)
	this.nowTime = now
}

// Loop时的时间
func (this *EntityTime) GetNowTime() time.Time {
	return this.nowTime
}

// 设置Loop时的时间
func (this *EntityTime) SetNowTime(n time.Time) {
	this.nowTime = n
}

// 设置TICK的时间 只有系统协程可以对子协程做
func (this *EntityTime) SetTickerNow(n time.Time) {
	select {
	case this.ticker <- n:
	default:
	}
}

// 获取TICK器
func (this *EntityTime) GetTicker() <-chan time.Time {
	return this.ticker
}
